來到了最後一步,讓我們用這幾天學習並建立的 Entity
及 Repository
在我們的 service
來實現業務邏輯及資料庫的增刪改查。
package com.example.spring.service;
import org.springframework.stereotype.Service;
@Service
public class Kitchen {
@Autowired
private RestaurantRepository restaurantRepository;
// 建立一筆資料
public RestaurantEntity creatRestaurant(RestaurantEntity restaurantEntity){
return restaurantRepository.save(restaurantEntity);
}
// 取得所有資料
public List<RestaurantEntity> getAllRestaurant(){
return restaurantRepository.findAll();
}
// 抓取特定資料
public RestaurantEntity getRestaurant(Long employeeNum){
return restaurantRepository.findById(employeeNum);
}
public RestaurantEntity getRestaurant(String chef){
return restaurantRepository.findByChef(chef);
}
// 更新資料
public RestaurantEntity updateRestaurant(Long employeeNum,
RestaurantEntity restaurantEntity){
restaurantEntity.setId(employeeNum);
return restaurantRepository.save(restaurantEntity);
}
// 刪除特定資料
public void deleteRestaurant(Long employeeNum){
restaurantRepository.deleteById(employeeNum);
}
}
以上的 Repository
皆是我們繼承 JpaRepository
所擁有的,可以依照小駝峰的命名規則去 findBy
資料庫特定的欄位,其中也包含 And
及 OrderBy
的使用規則。
最後再回到我們的 controller
將呼叫需要使用的服務層方法。
package com.example.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
@Autowire
private Kitchen kitchen;
@RequestMapping("/hello")
public ModelAndView helloWorld() {
ModelAndView modelAndView = new ModelAndView("helloView");
// 建立一個 Restaurant 物件
Restaurant restaurant = new Restaurant("John", "Fish");
// 將 Restaurant 物件新增到資料庫
kitchen.save(restaurant);
// 從資料庫獲取特定資料
restaurant = kitchen.findByChef("Ken");
String recipe = restaurant.getRecipe();
// 將資料庫查詢資料回傳
modelAndView.addAttribute("recipe", recipe);
// 回傳 ModelAndView 物件
return modelAndView;
}
}
這樣我就經由Spring MVC 及 Spring JPA 來連接資料庫實現網站最基本的增刪改查業務邏輯了!!我們可以根據自己的需求擴展和修改這個範例,添加更多功能和業務邏輯。
https://spring.io/guides/gs/accessing-data-jpa/
https://www.baeldung.com/jpa-entities
https://spring.io/projects/spring-data-jpa
https://www.baeldung.com/spring-data-repositories
https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa